/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Cadastra2.java
 *
 * Created on 19/05/2011, 23:25:43
 */
package pitaqueiro;

import exception.NomeInvalidoException;
import exception.NotaRestauranteInvalidoException;
import exception.QuantidadeRecomendacoesInvalidoException;
import exception.RestauranteInvalidoException;
import exception.TipoPreferenciaInvalidoException;
import exception.MapaOpinioesInvalidoException;
import com.sun.java_cup.internal.runtime.Symbol;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
/**
 *
 * @author Lucas
 */
public class Cadastra2 extends javax.swing.JFrame {
    
    
    //Declarando variaveis
    boolean contemUsuario=false;
    PerfilUsuario usuario=null;
    String NumRecomendacoes,NomeEstabelecimento,NotaEstabelecimento;
    String Algoritmo = null ;
    int IndiceNota,IndiceComecaDe1, IndiceListaEstabelecimento,indiceEstabelecimento;
    List<String> Preferencias = new ArrayList<String>();
    Map<String,String> MapaEstabelecimentoNota= new HashMap<String,String>();
    String nome = null;
     int IntNumRecomendacoes = 0;
    /** Creates new form Cadastra2 */
    public Cadastra2() {
        
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        GrupoAlgoritmo = new javax.swing.ButtonGroup();
        BotaoALaCarte = new javax.swing.JRadioButton();
        BotaoConfirmaCadastro = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        List<String> qntRecomendacoes = new ArrayList<String>();
        ManipulacaoDeArquivo leArq2 = new ManipulacaoDeArquivo();
        List<Estabelecimento> listaEstabelecimento2=null;
        int ContaRecomendacoes=0;
        String strSaida=null;
        try{
            leArq2.leEstabelecimentos();
            listaEstabelecimento2 = leArq2.getListaEstabelecimento();
        }catch (Exception ex){
            ex.getMessage();
        }
        for(int i=1 ;i<=listaEstabelecimento2.size();i++){
            strSaida = "Receber ";
            ContaRecomendacoes +=1;
            strSaida += ContaRecomendacoes;
            qntRecomendacoes.add(strSaida);
            strSaida = null;

        }
        QntRecomendacoes = new javax.swing.JComboBox();
        BarraTextNome = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        BotaoPratoFeito = new javax.swing.JRadioButton();
        BotaoSelfService = new javax.swing.JRadioButton();
        BotaoVoltar = new javax.swing.JButton();
        MensagemVoto = new javax.swing.JLabel();
        MensagemCadastro = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        BotaoPopularidade = new javax.swing.JCheckBox();
        BotaoPersonalizado = new javax.swing.JCheckBox();
        BotaoGerarRecomendacoes = new javax.swing.JButton();
        BotaoQueroMeCadastrar = new javax.swing.JButton();
        PainelTabela = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        //Erro o  intNumRecomendacoes sempre esta sendo zero, nao entra no for

        //List<String[]> Itens = new ArrayList<String[]>();
        //List<String> linha = new ArrayList<String>();
        //ManipulacaoDeArquivo manipulaArq = new ManipulacaoDeArquivo();
        String [] cabesalho = {"Estanelecimento","Avaliacao global"};
        String matriz[][]=null;
        //try{
            //manipulaArq.leEstabelecimentos();
            //manipulaArq.leOpinioes();
            //List<Estabelecimento> listaEstabelecimento = leArq.getListaEstabelecimento();
            matriz = new String[5/*deve ser o numero de recomendacoes escolhidas*/][2];
            //
            for(int i = 0; i < 5/*deve ser o numero de recomendacoes escolhidas*/;i++){
                //    matriz[i][0] =manipulaArq.geraRankingRestaurantes().get(i).split(";")[0];
                //    matriz[i][1] =manipulaArq.geraRankingRestaurantes().get(i).split(";")[1];
                matriz[i][0]=null;
                matriz[i][1]=null;
            }
            //}catch (Exception ex){
            //    ex.getMessage();
            //}
        Tabela = new javax.swing.JTable();
        PainelVotacao = new javax.swing.JPanel();
        List<String> nomeEst = new ArrayList<String>();
        LeituraDeArquivo leArq = new LeituraDeArquivo();
        try{
            leArq.leEstabelecimentos();
            List<Estabelecimento> listaEstabelecimento = leArq.getListaEstabelecimento();
            for(Estabelecimento est: listaEstabelecimento){
                nomeEst.add(est.getRestaurante());
            }
        }catch (Exception ex){
            ex.getMessage();
        }
        Estabelecimento = new javax.swing.JComboBox();
        EstabelecimentoNota = new javax.swing.JComboBox();
        BotaoConfirmaVoto = new javax.swing.JButton();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        BotaoALaCarte.setText("A La Carte");
        BotaoALaCarte.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BotaoALaCarteActionPerformed(evt);
            }
        });

        BotaoConfirmaCadastro.setText("Confirma Cadastro");
        BotaoConfirmaCadastro.setToolTipText("Salvar cadastro");
        BotaoConfirmaCadastro.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BotaoConfirmaCadastroActionPerformed(evt);
            }
        });
        BotaoConfirmaCadastro.setVisible(false);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel1.setText("Nome:");
        jLabel1.setVisible(false);

        QntRecomendacoes.setFont(new java.awt.Font("Tahoma", 0, 12));
        QntRecomendacoes.setModel(new javax.swing.DefaultComboBoxModel(qntRecomendacoes.toArray()));

        BarraTextNome.setForeground(new java.awt.Color(204, 204, 204));
        BarraTextNome.setText("Informe seu nome aqui");
        BarraTextNome.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                BarraTextNomeMouseClicked(evt);
            }
        });
        BarraTextNome.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BarraTextNomeActionPerformed(evt);
            }
        });
        BarraTextNome.setVisible(false);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel2.setText("Quantidade de recomendações que deseja receber: ");

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel3.setText("Preferência:");

        BotaoPratoFeito.setText("Prato Feito");
        BotaoPratoFeito.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BotaoPratoFeitoActionPerformed(evt);
            }
        });

        BotaoSelfService.setText("Self Service");
        BotaoSelfService.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                BotaoSelfServiceMouseClicked(evt);
            }
        });

        BotaoVoltar.setText("Voltar");
        BotaoVoltar.setToolTipText("Voltar para menu o inicial");
        BotaoVoltar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BotaoVoltarActionPerformed(evt);
            }
        });

        MensagemVoto.setFont(new java.awt.Font("Tahoma", 1, 14));
        MensagemVoto.setText("Seu voto foi computado com sucesso!");
        MensagemVoto.setVisible(false);

        MensagemCadastro.setFont(new java.awt.Font("Tahoma", 1, 15));
        MensagemCadastro.setText("Cadastro efetuado com sucesso!");
        MensagemCadastro.setVisible(false);

        jLabel7.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel7.setText("Tipo de Algoritmo: ");

        BotaoPopularidade.setText("Popularidade");
        BotaoPopularidade.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BotaoPopularidadeActionPerformed(evt);
            }
        });
        GrupoAlgoritmo.add(BotaoPopularidade);

        BotaoPersonalizado.setText("Personalizado");
        BotaoPersonalizado.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BotaoPersonalizadoActionPerformed(evt);
            }
        });
        GrupoAlgoritmo.add(BotaoPersonalizado);

        BotaoGerarRecomendacoes.setText("Gerar Recomendacoes");
        BotaoGerarRecomendacoes.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BotaoGerarRecomendacoesActionPerformed(evt);
            }
        });

        BotaoQueroMeCadastrar.setText("Quero me cadastrar");
        BotaoQueroMeCadastrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BotaoQueroMeCadastrarActionPerformed(evt);
            }
        });

        PainelTabela.setVisible(false);

        Tabela.setModel((new javax.swing.table.DefaultTableModel(
            matriz,cabesalho) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        }));
        jScrollPane1.setViewportView(Tabela);

        javax.swing.GroupLayout PainelTabelaLayout = new javax.swing.GroupLayout(PainelTabela);
        PainelTabela.setLayout(PainelTabelaLayout);
        PainelTabelaLayout.setHorizontalGroup(
            PainelTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, PainelTabelaLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 355, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        PainelTabelaLayout.setVerticalGroup(
            PainelTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(PainelTabelaLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 279, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        Estabelecimento.setModel(new javax.swing.DefaultComboBoxModel(nomeEst.toArray()));
        Estabelecimento.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                EstabelecimentoActionPerformed(evt);
            }
        });

        EstabelecimentoNota.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "  5 | Incrível", "  4 | Muito bom", "  3 | Bastante bom", "  2 | É bonzinho  ", "  1 | Não é ruim", "  0 | Não conheço", " -1 | Acho um pouco ruim", " -2 | Acho ruim", " -3 | Acho bastante ruim", " -4 | Acho muito ruim", " -5 | Detesto" }));
        EstabelecimentoNota.setToolTipText("Avaliação do estabelecimento de acordo com o usuário");
        EstabelecimentoNota.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                EstabelecimentoNotaActionPerformed(evt);
            }
        });

        BotaoConfirmaVoto.setText("Confirma voto");
        BotaoConfirmaVoto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BotaoConfirmaVotoActionPerformed(evt);
            }
        });

        jLabel5.setFont(new java.awt.Font("Tahoma", 1, 11));
        jLabel5.setText("Estabelecimento: ");

        jLabel6.setFont(new java.awt.Font("Tahoma", 1, 11));
        jLabel6.setText("Avaliação do estabelecimento:");

        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel4.setText("Dar opinião: ");

        javax.swing.GroupLayout PainelVotacaoLayout = new javax.swing.GroupLayout(PainelVotacao);
        PainelVotacao.setLayout(PainelVotacaoLayout);
        PainelVotacaoLayout.setHorizontalGroup(
            PainelVotacaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 419, Short.MAX_VALUE)
            .addGroup(PainelVotacaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(PainelVotacaoLayout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(PainelVotacaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel4)
                        .addGroup(PainelVotacaoLayout.createSequentialGroup()
                            .addComponent(jLabel6)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(EstabelecimentoNota, 0, 222, Short.MAX_VALUE))
                        .addGroup(PainelVotacaoLayout.createSequentialGroup()
                            .addComponent(jLabel5)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(Estabelecimento, 0, 295, Short.MAX_VALUE))
                        .addComponent(BotaoConfirmaVoto, javax.swing.GroupLayout.Alignment.TRAILING))
                    .addContainerGap()))
        );
        PainelVotacaoLayout.setVerticalGroup(
            PainelVotacaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 140, Short.MAX_VALUE)
            .addGroup(PainelVotacaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(PainelVotacaoLayout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jLabel4)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addGroup(PainelVotacaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel5)
                        .addComponent(Estabelecimento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addGroup(PainelVotacaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel6)
                        .addComponent(EstabelecimentoNota, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(18, 18, 18)
                    .addComponent(BotaoConfirmaVoto)
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addComponent(BotaoPratoFeito)
                                .addGap(18, 18, 18)
                                .addComponent(BotaoSelfService)
                                .addGap(18, 18, 18)
                                .addComponent(BotaoALaCarte))
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                    .addComponent(jLabel2)
                                    .addGap(30, 30, 30)
                                    .addComponent(QntRecomendacoes, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                    .addComponent(BarraTextNome, javax.swing.GroupLayout.PREFERRED_SIZE, 534, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(BotaoConfirmaCadastro)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(BotaoQueroMeCadastrar)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 300, Short.MAX_VALUE)
                                .addComponent(BotaoGerarRecomendacoes)
                                .addGap(10, 10, 10)
                                .addComponent(BotaoVoltar)))
                        .addContainerGap())
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(MensagemCadastro)
                        .addContainerGap(655, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(MensagemVoto)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 157, Short.MAX_VALUE))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jLabel7)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 78, Short.MAX_VALUE))
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(BotaoPopularidade)
                                        .addGap(18, 18, 18)
                                        .addComponent(BotaoPersonalizado)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                                .addGap(9, 9, 9))
                            .addComponent(PainelVotacao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(PainelTabela, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(42, 42, 42))))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {BotaoConfirmaCadastro, BotaoGerarRecomendacoes, BotaoQueroMeCadastrar, BotaoVoltar});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(BarraTextNome, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(QntRecomendacoes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel3)
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(BotaoPratoFeito)
                            .addComponent(BotaoSelfService)
                            .addComponent(BotaoALaCarte))
                        .addGap(39, 39, 39)
                        .addComponent(jLabel7)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(BotaoPopularidade)
                            .addComponent(BotaoPersonalizado))
                        .addGap(18, 18, 18)
                        .addComponent(PainelVotacao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(26, 26, 26)
                        .addComponent(MensagemVoto))
                    .addComponent(PainelTabela, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(MensagemCadastro)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 28, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(BotaoVoltar)
                    .addComponent(BotaoGerarRecomendacoes)
                    .addComponent(BotaoConfirmaCadastro)
                    .addComponent(BotaoQueroMeCadastrar))
                .addContainerGap())
        );

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {BotaoConfirmaCadastro, BotaoGerarRecomendacoes, BotaoQueroMeCadastrar, BotaoVoltar});

        pack();
    }// </editor-fold>//GEN-END:initComponents
    
    private void BotaoConfirmaCadastroActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BotaoConfirmaCadastroActionPerformed

        
       
        
        nome = BarraTextNome.getText();
        
        
        
        
        if(nome==null||nome.trim().equals("")||nome.trim().equals("Informe seu nome aqui")){
            new NomeERRO().show();
        }else{
        //Recebe o nome da entrada      
        
        //Como o primeiro indice eh 0 vamos somar um
        IndiceComecaDe1 = 1;
        IntNumRecomendacoes =IndiceComecaDe1+ QntRecomendacoes.getSelectedIndex();
        
        try {
            
            //Quando clicar nesse botao deve verificar se os dados passados estao corretos salvar os dados do novo usuario
             usuario = new PerfilUsuario(nome,MapaEstabelecimentoNota);
             
             //Cria uma string (que vai ser uma linha do arquivo) e escreve no arquivo
             ManipulacaoDeArquivo manipulacao = new ManipulacaoDeArquivo();
             String concatena = usuario.getNome()+";"+usuario.MapaOpinioestoString(manipulacao);
             
             manipulacao.EscreveOpinioes(concatena);
             
             //exibe mensagem de cadostro com sucesso
             MensagemVoto.setVisible(false);
             MensagemCadastro.setVisible(true);
             PainelVotacao.setVisible(false);
             
             
         
        } catch (NomeInvalidoException ex) {
             new NomeERRO().show();
        } catch (TipoPreferenciaInvalidoException ex) {

              new PreferenciaERRO().show();
        } catch (QuantidadeRecomendacoesInvalidoException ex) {
               ex.getMessage();
         } catch (MapaOpinioesInvalidoException ex){
                    ex.getMessage();
        } catch (Exception ex) {

            Logger.getLogger(Cadastra2.class.getName()).log(Level.SEVERE, null, ex);
        } 
        }
      this.dispose();
      new Menu().show();
    }//GEN-LAST:event_BotaoConfirmaCadastroActionPerformed

    private void BarraTextNomeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BarraTextNomeActionPerformed
        BarraTextNome.setText("");
       
    }//GEN-LAST:event_BarraTextNomeActionPerformed

    private void BarraTextNomeMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_BarraTextNomeMouseClicked
       BarraTextNome.setText("");
    }//GEN-LAST:event_BarraTextNomeMouseClicked

    private void BotaoSelfServiceMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_BotaoSelfServiceMouseClicked
        if(Preferencias.contains("Self Service")==false){
            Preferencias.add("Self Service");
        }
        
}//GEN-LAST:event_BotaoSelfServiceMouseClicked

    private void BotaoPratoFeitoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BotaoPratoFeitoActionPerformed
    if(Preferencias.contains("Prato Feito")==false){
        Preferencias.add("Prato Feito");
    }
    }//GEN-LAST:event_BotaoPratoFeitoActionPerformed

    private void BotaoALaCarteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BotaoALaCarteActionPerformed
       if(Preferencias.contains("A La Carte")==false){
        Preferencias.add("A La Carte");
       }
    }//GEN-LAST:event_BotaoALaCarteActionPerformed

    private void BotaoVoltarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BotaoVoltarActionPerformed
       new Menu().show();
       this.dispose();
    }//GEN-LAST:event_BotaoVoltarActionPerformed

    private void BotaoConfirmaVotoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BotaoConfirmaVotoActionPerformed
      
     
      
        
      //Capturando o nome do estabelecimento
      IndiceListaEstabelecimento=  Estabelecimento.getSelectedIndex();
      NomeEstabelecimento = DarNomeEstabelecimento(IndiceListaEstabelecimento);
      //Capturando a avaliacao do estabelecimento
      IndiceNota = EstabelecimentoNota.getSelectedIndex();
      NotaEstabelecimento = DarNota(IndiceNota);
      
      MapaEstabelecimentoNota.put(NomeEstabelecimento,NotaEstabelecimento) ;
      MensagemVoto.setVisible(true);

      
//      //Evita add estabelecimentos repetidos, caso ja exista ele apenas muda a avaliacao
//      System.out.println(NomeEstabelecimento+" "+NotaEstabelecimento+"mapa "+MapaEstabelecimentoNota);
//      if(MapaEstabelecimentoNota.containsKey(NomeEstabelecimento)){
//            try {
//               
//                usuario.setMapaOpinioes(NomeEstabelecimento, NotaEstabelecimento, MapaEstabelecimentoNota);
//              //System.out.println(NomeEstabelecimento+" "+NotaEstabelecimento+"mapa "+MapaEstabelecimentoNota);
//                System.out.println("confirma voto "+usuario.getMapaOpinioes());
//                MensagemVoto.setVisible(true);
//            } catch (RestauranteInvalidoException ex) {
//                
//                Logger.getLogger(Cadastra2.class.getName()).log(Level.SEVERE, null, ex);
//            } catch (NotaRestauranteInvalidoException ex) {
//                System.out.print("erro2");
//                Logger.getLogger(Cadastra2.class.getName()).log(Level.SEVERE, null, ex);
//            } catch (MapaOpinioesInvalidoException ex) {
//                System.out.print("erro3");
//                Logger.getLogger(Cadastra2.class.getName()).log(Level.SEVERE, null, ex);
//            }
//          MensagemVoto.setVisible(true);
      

      
    }//GEN-LAST:event_BotaoConfirmaVotoActionPerformed

    private void EstabelecimentoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_EstabelecimentoActionPerformed
        MensagemVoto.setVisible(false);
    }//GEN-LAST:event_EstabelecimentoActionPerformed

    private void EstabelecimentoNotaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_EstabelecimentoNotaActionPerformed
         MensagemVoto.setVisible(false);
    }//GEN-LAST:event_EstabelecimentoNotaActionPerformed

    private void BotaoPersonalizadoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BotaoPersonalizadoActionPerformed
        Algoritmo = "PERSONALIZADO";
    }//GEN-LAST:event_BotaoPersonalizadoActionPerformed

    private void BotaoPopularidadeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BotaoPopularidadeActionPerformed
       Algoritmo = "POPULARIDADE";
    }//GEN-LAST:event_BotaoPopularidadeActionPerformed

    private void BotaoQueroMeCadastrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BotaoQueroMeCadastrarActionPerformed
        Tabela.setVisible(false);
        BotaoConfirmaCadastro.setVisible(true);
        jLabel1.setVisible(true);
        BarraTextNome.setVisible(true);
        BotaoQueroMeCadastrar.setVisible(false);
    }//GEN-LAST:event_BotaoQueroMeCadastrarActionPerformed

    private void BotaoGerarRecomendacoesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BotaoGerarRecomendacoesActionPerformed

        if(Algoritmo == null){
            
            new EscolhaAlgoritmoERRO().show();
        }
        
        else if(Algoritmo.toUpperCase().equals("POPULARIDADE")||Algoritmo.toUpperCase().equals("PERSONALIZADO")){
            
        nome = "Temporario";
        

       
        indiceEstabelecimento = Estabelecimento.getSelectedIndex();
        MapaEstabelecimentoNota.put(DarNomeEstabelecimento(indiceEstabelecimento), DarNota(EstabelecimentoNota.getItemCount()));
        
        
        

        //Como o primeiro indice eh 0 vamos somar um
        IndiceComecaDe1 = 1;
        IntNumRecomendacoes =IndiceComecaDe1+ QntRecomendacoes.getSelectedIndex();
        
        
        
         try {
            
            //Quando clicar nesse botao deve verificar se os dados passados estao corretos salvar os dados do novo usuario
             usuario = new PerfilUsuario(nome,MapaEstabelecimentoNota);
             
             //exibe mensagem de cadostro com sucesso
             MensagemVoto.setVisible(false);
             
             PainelTabela.setVisible(true);
             
         
        } catch (NomeInvalidoException ex) {
             new NomeERRO().show();
        } catch (TipoPreferenciaInvalidoException ex) {

              new PreferenciaERRO().show();
        } catch (QuantidadeRecomendacoesInvalidoException ex) {
               ex.getMessage();
         } catch (MapaOpinioesInvalidoException ex){
                    ex.getMessage();
        } catch (Exception ex) {

            Logger.getLogger(Cadastra2.class.getName()).log(Level.SEVERE, null, ex);
        } 
 
        }
      
        
        
             
            
       /*
        * Desenha a tabela
        */
            
            List<String> ListaTeste;
            ManipulacaoDeArquivo manipulaArq = new ManipulacaoDeArquivo();
            
            String [] cabesalho = {"Estanelecimento","Avaliacao global"};
            String matriz[][]=null;
            try{
            manipulaArq.leEstabelecimentos();
            manipulaArq.leOpinioes();
            List<Estabelecimento> listaEstabelecimento = manipulaArq.getListaEstabelecimento();
            matriz = new String[IntNumRecomendacoes][2];
            manipulaArq.geraRankingRestaurantes();
            List<String> Recomendacoes = manipulaArq.getRecomendacoesRestaurantes(usuario, manipulaArq);
            for(int i = 0; i < IntNumRecomendacoes;i++){
                if(Algoritmo.equals("POPULARIDADE")){
                    matriz[i][0] =manipulaArq.getListaRestaurantePopular().get(i).split(";")[0];
                    matriz[i][1] =manipulaArq.getListaRestaurantePopular().get(i).split(";")[1];
                }
                else if(Algoritmo.toUpperCase().equals("PERSONALIZADO")){
                   
                   
                    matriz[i][0] =Recomendacoes.get(i);
                    matriz[i][1] =null;
                }

            }
            }catch (Exception ex){
                System.out.print(ex.getMessage());
                ex.getMessage();
            }
            Tabela = new javax.swing.JTable();

            Tabela.setModel((new javax.swing.table.DefaultTableModel(
                matriz,cabesalho) {
                boolean[] canEdit = new boolean [] {
                    false, false, false, false
                };

                public boolean isCellEditable(int rowIndex, int columnIndex) {
                    return canEdit [columnIndex];
                }
            }));

            jScrollPane1.setViewportView(Tabela);

            PainelTabela.setVisible(true);
    
            
        

      
    }//GEN-LAST:event_BotaoGerarRecomendacoesActionPerformed

    
    /*
     * Retorna o nome do estabelecimento
     * @param int
     * @return String
     */
    public String DarNomeEstabelecimento(int indice){
       ManipulacaoDeArquivo arq = new ManipulacaoDeArquivo();
        try {
            arq.leEstabelecimentos();
        } catch (IOException ex) {
            Logger.getLogger(Cadastra2.class.getName()).log(Level.SEVERE, null, ex);
        }
        String nome = arq.getListaEstabelecimento().get(indice).getRestaurante();
        return nome;
    }
    
    /*
     * Retorna uma String como a avaliacao do estabelecimento
     * @param int
     * @return String
     */
    public String DarNota(int idice){
        String nota=null;
        if(IndiceNota==0){
           nota = "5"; 
        }else if(IndiceNota==1){
            nota= "4";
        }else if(IndiceNota==2){
            nota="3";
        }else if(IndiceNota==3){
            nota = "2";
        }else if(IndiceNota==4){
            nota = "1";
        }else if(IndiceNota==5){
            nota="0";
        }else if(IndiceNota==6){
            nota = "-1";
        }else if(IndiceNota==7){
            nota= "-2";
        }else if(IndiceNota==8){
            nota="-3";
        }else if(IndiceNota==9){
            nota = "-4";
        }else if(IndiceNota==10){
            nota = "-5";
        }
        
        return nota;
    }
    
    
     /*
     * Verifica se existe pelo menos um tipo de comida preferido
     * @Param List<String>
     * @Return boolean
     */
    public boolean VerifaPreferencia(List<String> listaPreferencias){
        if (listaPreferencias.size()==0){
            return false;
        }
        return true;
    }
    
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            
            public void run() {
                new Cadastra2().setVisible(true);
                
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField BarraTextNome;
    private javax.swing.JRadioButton BotaoALaCarte;
    private javax.swing.JButton BotaoConfirmaCadastro;
    private javax.swing.JButton BotaoConfirmaVoto;
    private javax.swing.JButton BotaoGerarRecomendacoes;
    private javax.swing.JCheckBox BotaoPersonalizado;
    private javax.swing.JCheckBox BotaoPopularidade;
    private javax.swing.JRadioButton BotaoPratoFeito;
    private javax.swing.JButton BotaoQueroMeCadastrar;
    private javax.swing.JRadioButton BotaoSelfService;
    private javax.swing.JButton BotaoVoltar;
    private javax.swing.JComboBox Estabelecimento;
    private javax.swing.JComboBox EstabelecimentoNota;
    private javax.swing.ButtonGroup GrupoAlgoritmo;
    private javax.swing.JLabel MensagemCadastro;
    private javax.swing.JLabel MensagemVoto;
    private javax.swing.JPanel PainelTabela;
    private javax.swing.JPanel PainelVotacao;
    private javax.swing.JComboBox QntRecomendacoes;
    private javax.swing.JTable Tabela;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JScrollPane jScrollPane1;
    // End of variables declaration//GEN-END:variables
}
